package com.wty.example.publish;


//对象发布指的是外部可以调用该对象
//对象逸出指的是对象未构建完成便被发布了


//安全发布对象的几种情况
//1.静态初始化函数中初始化一个对象的引用
//2.将对象的引用放在一个被锁保护的域中
//3.将对象的引用保存在voliate或者atomicReference中
//4.将对象的引用保存到某个正确构造对象的final类型域中


import com.wty.annotations.ThreadSafe;

//枚举没事
@ThreadSafe
public class publishDemo4 {

    private publishDemo4() {

    }

    public static publishDemo4 getInstance() {
        return singleton.INSTANCE.getSingleton();
    }

    public enum singleton{
        INSTANCE;

        private publishDemo4 singleton;

        //jvm保证这个方法只调用一次
        singleton(){
            singleton=new publishDemo4();
        }

        public publishDemo4 getSingleton(){
            return singleton;
        }

    }

}
